/* 
axios二次封装
*/

import axios from 'axios'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken, removeToken, removeUser } from '../utils/storageUtils'

// 创建一个新的axios
const request = axios.create({
  baseURL: 'http://localhost:8081', // 基础路径
  timeout: 20000 // 超时时间
})

// 添加请求拦截器
request.interceptors.request.use(config => {

  // 显示进度条
  NProgress.start()

  // 携带token请求头
  const token = getToken()
  if (token) {
    config.headers['token'] = token
  }

  // 必须返回config
  return config
})

// 添加响应拦截器
request.interceptors.response.use(
  response => { 
    // 结束进度条
    NProgress.done()

    // 返回响应体数据
    return response.data
  },
  error => {
    // 结束进度条
    NProgress.done()
    // 得到错误的响应状态码
    const status = error.response.status
    // 如果是401, 说明token已过期
    if (status===401) {
      // 清除保存的用户信息和token
      removeToken()
      removeUser()
      // 跳转到登陆页面
      window.location = '/login.html'
    } else { // 其它错误, 提示一下错误信息
      alert(error.message)
    }

    // 向后传递错误
    throw error
  }
)

// 默认暴露request
export default request